package com.cn.wanxi.config;

import com.alibaba.fastjson.JSONObject;
import com.cn.wanxi.model.ResultModel;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 只需要拦截以back开头的地址即可
 */
//@WebFilter("/back/*")
@WebFilter("/*")// /* 拦截所有
public class MyFilter implements Filter {
    /**
     * 一般用于项目启动后要做的一件事情，而且只做一次：init 初始化
     *
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {


    }

    /**
     * 这里就是我们需要去拦截时做的代码，服务逻辑
     * 只要是由接口来访问后台，只要是以/back/开头都可以进行拦截
     *
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //      0.乱码处理
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
//        取得前端访问后台的地址
        String path = req.getServletPath();
        System.out.println(path);
//        只要以back开头的就需要判断是否已经登录
        if (path.startsWith("/back/")) {
            String username = (String) req.getSession().getAttribute("username");//假如这里是判断当前用户是否已经登录
//            String key=req.getParameter("username");
//            String username = (String) req.getSession().getAttribute(key);
            if (username == null) {
//            适用于前后端分离
//            servletResponse.getWriter().println(JSONObject.toJSONString(ResultModel.getResultModel("未登录，请重新登录")));
//            也可以直接返回到登录页面
//            重定向到登录页面
                resp.sendRedirect("/html/login.html");

            } else {
//登录成功以后，我们需要将连接转发到后台//其实就是对当前地址进行放行
                filterChain.doFilter(req, resp);
            }

        } else {
//            放行
            filterChain.doFilter(req, resp);
        }
    }

    /**
     * 项目正常销毁的情况下，做的事情
     */
    @Override
    public void destroy() {

    }
}
